import constant from '@/utils/constant'
const { CACHE_VISIT_PV } = constant

import Cache from '@/utils/cache'
let cache = new Cache()
cache.setCacheType = 'localStorage'

import moment from "moment"

import { savePV } from '@/api/app'

/**
 * 统计规则 (每天浏览量)
 * 每浏览 n 次向后端请求一次 （服务器垃圾没办法）
 * 如果遇到浏览 n 次以内则 下次浏览时 在统计 (这个会造成最近2天数据不准确)
 * @param to
 * @param from
 */
export const setPV =  (to, from) => {
    const num = 10 // 浏览n次请求一次

    let { name } = to

    // 获取今天最后的时间
    let dayEnd = moment().endOf('day').valueOf()
    let timeStamp = new Date().valueOf()

    cache.getCache(CACHE_VISIT_PV, async cacheData => {
        if (cacheData) {
            cacheData = cacheData.total < num ? cacheData : await reqSavePv(cacheData)

            let nowName = cacheData[name] || 0

            cacheData[name] = nowName + 1 // 增加当前页面浏览量

            cacheData.total += 1
            // 保存
            cache.setCache(CACHE_VISIT_PV, cacheData, dayEnd - timeStamp)
        } else {
            let data = {
                total: 1,
                [name]: 1,
            }
            cache.setCache(CACHE_VISIT_PV, data, dayEnd - timeStamp)
        }
    })
}
// 请求 （保存浏览量）
const reqSavePv = async (cacheData) => {
    try {
        await savePV(cacheData)
        return { // 重置数量
            total: 0,
        }
    } catch (err) {
        // 失败的话继续统计
        return cacheData
    }
}